import 'package:playtruly/common/services/http.dart';
import 'package:playtruly/common/models/share_request.dart';
import 'package:playtruly/common/models/share_response.dart';
import 'package:playtruly/common/utils/encryption_util.dart';
import 'dart:developer' as developer;

/// 分享相关API
/// 对应MyApplication2项目中的分享功能
class ShareApi {
  
  /// 创建分享链接（使用AES加密）
  /// 🔥 完全对应MyApplication2项目中的 `/share/create/` 接口和参数格式
  /// [shareTitle] 分享标题
  /// [userId] 用户ID
  /// [userNickname] 用户昵称
  /// [userGender] 用户性别
  /// [userCity] 用户城市
  /// [userAvatarUrl] 用户头像URL
  /// [contentType] 内容类型：'activity'（活动）、'comment'（评论）
  /// [contentTitle] 内容标题
  /// [contentText] 内容描述
  /// [contentImages] 内容图片列表
  /// 返回分享链接信息
  static Future<ShareResponse> createShare({
    required String shareTitle,
    required String userId,
    required String userNickname,
    required String userGender,
    required String userCity,
    required String userAvatarUrl,
    required String contentType,
    required String contentTitle,
    required String contentText,
    required List<String> contentImages,
  }) async {
    try {
      developer.log('🔄 =============== 开始创建分享链接（MyApplication2格式，AES加密） ===============');
      developer.log('🎯 内容类型: $contentType');
      developer.log('📝 内容标题: $contentTitle');
      developer.log('👤 用户昵称: $userNickname');

      // 🔥 生成时间戳（与MyApplication2完全一致：使用int类型）
      // MyApplication2使用：System.currentTimeMillis() / 1000 (long类型)
      final timestamp = (DateTime.now().millisecondsSinceEpoch ~/ 1000);

      // 🔥 创建请求模型（完全匹配MyApplication2格式）
      final request = ShareRequest(
        shareTitle: shareTitle,
        userId: userId,
        userNickname: userNickname,
        userGender: userGender,
        userCity: userCity,
        userAvatarUrl: userAvatarUrl,
        contentType: contentType,
        contentTitle: contentTitle,
        contentText: contentText,
        contentImages: contentImages,
        timestamp: timestamp,
      );

      // 获取请求数据
      final requestData = request.toJson();
      developer.log('📊 请求参数（加密前，MyApplication2格式）: $requestData');
      
      // 🔥 使用AES加密
      developer.log('🔐 开始AES加密分享数据...');
      final encryptedPayload = EncryptionUtil.createEncryptedPayload(requestData);
      
      developer.log('🚀 准备发送加密请求到: /share/create/');

      // 发送请求（参考MyApplication2项目的接口路径）
      final response = await HttpService.to.post(
        '/share/create/',
        data: encryptedPayload,
      );

      developer.log('📨 分享创建响应: $response');
      developer.log('📊 响应数据类型: ${response.runtimeType}');

      // 解析响应
      final shareResponse = ShareResponse.fromJson(response);

      if (shareResponse.isSuccess) {
        developer.log('✅ 分享链接创建成功（MyApplication2格式）');
        developer.log('🔗 分享URL: ${shareResponse.data?.shareUrl}');
        developer.log('🆔 分享ID: ${shareResponse.data?.shareId}');
      } else {
        developer.log('❌ 分享链接创建失败: ${shareResponse.message}');
      }

      return shareResponse;
    } catch (e) {
      developer.log('💥 创建分享链接异常: $e');
      return ShareResponse(
        status: 'error',
        message: '创建分享链接失败: ${e.toString()}',
      );
    }
  }

  /// 创建活动分享链接（便捷方法）
  /// 🔥 自动获取当前用户信息并格式化活动数据
  /// [activityTitle] 活动标题
  /// [activityText] 活动描述
  /// [activityImages] 活动图片列表
  /// [userId] 用户ID（可选）
  /// [userNickname] 用户昵称（可选，如果不提供会尝试从UserService获取）
  /// [userGender] 用户性别（可选）
  /// [userCity] 用户城市（可选）
  /// [userAvatarUrl] 用户头像URL（可选）
  static Future<ShareResponse> createActivityShare({
    required String activityTitle,
    required String activityText,
    required List<String> activityImages,
    String? userId,
    String? userNickname,
    String? userGender,
    String? userCity,
    String? userAvatarUrl,
  }) async {
    return createShare(
      shareTitle: '我在玩真的发现了一个有趣的活动，快来看看吧！',
      userId: userId ?? '',
      userNickname: userNickname ?? '玩真的用户',
      userGender: userGender ?? '',
      userCity: userCity ?? '',
      userAvatarUrl: userAvatarUrl ?? '',
      contentType: 'activity',
      contentTitle: activityTitle,
      contentText: activityText,
      contentImages: activityImages,
    );
  }

  /// 创建评论分享链接（便捷方法）
  /// 🔥 自动获取当前用户信息并格式化评论数据
  /// [commentTitle] 评论标题
  /// [commentText] 评论内容
  /// [commentImages] 评论图片列表
  /// [userId] 用户ID（可选）
  /// [userNickname] 用户昵称（可选）
  /// [userGender] 用户性别（可选）
  /// [userCity] 用户城市（可选）
  /// [userAvatarUrl] 用户头像URL（可选）
  static Future<ShareResponse> createCommentShare({
    required String commentTitle,
    required String commentText,
    required List<String> commentImages,
    String? userId,
    String? userNickname,
    String? userGender,
    String? userCity,
    String? userAvatarUrl,
  }) async {
    return createShare(
      shareTitle: '我在玩真的发现了一个有趣的评论，快来看看吧！',
      userId: userId ?? '',
      userNickname: userNickname ?? '玩真的用户',
      userGender: userGender ?? '',
      userCity: userCity ?? '',
      userAvatarUrl: userAvatarUrl ?? '',
      contentType: 'comment',
      contentTitle: commentTitle,
      contentText: commentText,
      contentImages: commentImages,
    );
  }

  /// 🔍 获取分享统计信息（可选功能）
  /// [shareId] 分享ID
  static Future<Map<String, dynamic>> getShareStats({
    required int shareId,
  }) async {
    try {
      developer.log('🔄 =============== 开始获取分享统计（AES加密） ===============');
      developer.log('🎯 分享ID: $shareId');

      final requestData = {
        'shareId': shareId,
      };

      developer.log('📊 请求参数（加密前）: $requestData');
      
      // 🔥 使用AES加密
      final encryptedPayload = EncryptionUtil.createEncryptedPayload(requestData);
      
      developer.log('🚀 准备发送加密请求到: /share/stats/');

      // 发送请求
      final response = await HttpService.to.post(
        '/share/stats/',
        data: encryptedPayload,
      );

      developer.log('📨 分享统计响应: $response');

      if (response is Map<String, dynamic> && response['status'] == 'success') {
        developer.log('✅ 分享统计获取成功');
        return response;
      } else {
        developer.log('❌ 分享统计获取失败');
        return {
          'status': 'error',
          'message': '获取分享统计失败',
        };
      }
    } catch (e) {
      developer.log('💥 获取分享统计异常: $e');
      return {
        'status': 'error',
        'message': '获取分享统计失败: ${e.toString()}',
      };
    }
  }
}
